package com.leyou.item.client;

import com.leyou.common.utils.PageResult;
import com.leyou.item.dto.CartDto;
import com.leyou.item.pojo.Sku;
import com.leyou.item.pojo.Spu;
import com.leyou.item.pojo.SpuBo;
import com.leyou.item.pojo.SpuDetail;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

public interface GoodsApi {

    /**
     * 分页查询商品
     * @param page
     * @param rows
     * @param saleable
     * @param key
     * @return
     */
    @GetMapping("/spu/page")
    PageResult<SpuBo> querySpuByPage(
            @RequestParam(value = "page", defaultValue = "1") Integer page,
            @RequestParam(value = "rows", defaultValue = "5") Integer rows,
            @RequestParam(value = "saleable", defaultValue = "true") Boolean saleable,
            @RequestParam(value = "key", required = false) String key);

    /**
     * 根据spu商品id查询详情
     * @param id
     * @return
     */
    @GetMapping("/spu/detail/{id}")
    SpuDetail querySpuDetailById(@PathVariable("id") Long id);

    /**
     * 根据spu的id查询sku
     * @param id
     * @return
     */
    @GetMapping("sku/list")
    List<Sku> querySkuBySpuId(@RequestParam("id") Long id);



    /**
     * 根据spuId查询spu信息
     * @param spuId
     * @return
     */
    @GetMapping("spu/{spuId}")
    Spu querySpuBySpuId(@PathVariable("spuId") Long spuId);

    /**
     * 分页查询SPU
     * @param page
     * @param rows
     * @param key
     * @return
     */
    @GetMapping("/spu/page")
    PageResult<SpuBo> findSpuByPage(@RequestParam(value = "page",defaultValue = "1")  Integer page,@RequestParam(value = "rows",defaultValue = "5") Integer rows,
                                    @RequestParam(value = "key",required = false)String key,
                                    @RequestParam(value = "saleable", required = false) Boolean saleable);

    /**
     * 根据spuId查询detail
     *
     * @param spuId
     * @return
     */
    @GetMapping("/spu/detail/{spuId}")
    SpuDetail querySpuDetailBySpuId(@PathVariable("spuId") Long spuId);

    /**
     * 根据sku的id集合查询sku集合
     * @param ids
     * @return
     */
    @GetMapping("sku/list/ids")
    List<Sku> querySkuByIds(@RequestParam("ids") List<Long> ids);

    /**
     * @author:zty
     * @date: 2019年01月17日 16:55:51
     * @description 根据sid查询Sku
     * @method  querySkusBySpuId
     * @param sid
     * @return org.springframework.http.ResponseEntity<java.util.List<com.leyou.item.pojo.Sku>>
     */
    @GetMapping("sku/list/{sid}")
    List<Sku> querySkusBySpuId(@PathVariable("sid") Long sid);

    /**
     * @author:zty
     * @date: 2019年01月17日 17:25:27
     * @description 根据sid查询sku
     * @method  querySkuBySkuId
     * @param id
     * @return org.springframework.http.ResponseEntity<com.leyou.item.pojo.Sku>
     */
    @GetMapping("sku/{id}")
    Sku querySkuBySkuId(@PathVariable("id")Long id);
    /**
     * 查询所有商品的spuId集合
     * @return
     */
    @GetMapping("spu")
    List<Sku> queryAllSpuId();

    /**
     * 新增商品
     * @param spu
     * @return
     */
    @PostMapping
    Void saveGoods(@RequestBody Spu spu);


    /**
     * 删除商品
     * @param spuId
     * @return
     */
    @DeleteMapping("/delete/{spuId}")
    Void deleteGoods(@PathVariable("spuId") Long spuId);




    /**
     * 修改商品
     * @param spu
     * @return
     */
    @PutMapping
    Void updateGoods(@RequestBody SpuBo spu);

    /**
     * 上架商品
     * @param spuId
     * @return
     */
    @PutMapping("/goods/on/{spuId}")
    Void onSaleGoods(@PathVariable("spuId") Long spuId);

    /**
     * 下架商品
     * @param spuId
     * @return
     */
    @PutMapping("/goods/off/{spuId}")
    Void offSaleGoods(@PathVariable("spuId") Long spuId);



    @PostMapping("stock/decrease")
    Void decreaseStock(@RequestBody List<CartDto> cartDtos);

    /**
     * 加库存
     * @param
     * @param
     */
    @PostMapping("stock/crease")
    void creaseStock(@RequestBody Map<Long, Integer> map);
}